package com.blog.controller;
import com.blog.Utils.Result;
import com.blog.annotion.LoginAnnotatio;
import com.blog.base.ThreadLocalUserId;
import com.blog.bean.domain.Message;
import com.blog.bean.dto.MessageDTO;
import com.blog.service.MessageService;
import com.blog.bean.vo.MessageDetailVO;
import com.blog.bean.vo.MessageListVO;
import com.blog.bean.vo.SystemMessageVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

/**
 * @author 任浩
 * @version 1.0
 */

@RestController
@RequestMapping("/message")
@Slf4j
public class MessageController {

    @Autowired
    private MessageService messageService;

    /**
     * 查询私信的信息方法。
     * @param messageDTO
     * @param session
     * @return
     */
    @GetMapping
    @LoginAnnotatio  //检查登录，只有登录的用户，才能够访问当前页面。
    public Result messafeList(MessageDTO messageDTO, HttpSession session){
        //得到用户的id。
        Integer userId = (Integer)session.getAttribute("userId");
        if(userId == null){
            userId = Integer.parseInt(ThreadLocalUserId.get());
        }
        //根据用户id，查询当前用户的私信列表，并且查询出最新的信息。
        MessageListVO messageListVO = messageService.queryMessage(messageDTO,userId);
        //查询系统的未读消息
        Message message = new Message();
        message.setFromId(1);
        message.setToId(userId);
        Integer count = messageService.topicUnreadCount(message);
        messageListVO.setUnreadSystemMessageTotal(count);
        System.out.println(messageListVO);
        return Result.success(messageListVO);
    }

    /**
     * 查询私信的具体信息的方法。
     * @param messageDTO
     * @param session
     * @return
     */
    @GetMapping("/queryDetail")
    @LoginAnnotatio
    public Result queryDetail(MessageDTO messageDTO,HttpSession session){
        //得到当前用户的id
        Integer userId = (Integer)session.getAttribute("userId");
        if(userId == null){
            userId = Integer.parseInt(ThreadLocalUserId.get());
        }

        MessageDetailVO messageDetailVO = messageService.queryDetail(messageDTO,userId);
        System.out.println(messageDetailVO);
        return Result.success(messageDetailVO);
    }
    /**
     * 添加私信的方法。
     */
    @PostMapping
    @LoginAnnotatio
    public Result add(@RequestBody MessageDTO messageDTO,HttpSession httpSession){
        log.info("添加私信的方法");
        //得到当前用户的id
        Integer userId = (Integer)httpSession.getAttribute("userId");
        if(userId == null){
            userId = Integer.parseInt(ThreadLocalUserId.get());
        }
        messageService.add(messageDTO,userId);
        return Result.success();
    }

    /**
     * 查询系统通知。
     * @param messageDTO
     * @param session
     * @return
     */
    @GetMapping("/system")
    @LoginAnnotatio
    public Result systemMsgList(MessageDTO messageDTO, HttpSession session){
        //得到用户的id。
        Integer userId = (Integer)session.getAttribute("userId");
        if(userId == null){
            userId = Integer.parseInt(ThreadLocalUserId.get());
        }
        //根据用户id，查询当前用户的系统通知列表，并且查询出最新的信息。
        SystemMessageVO systemMessageVO = messageService.systemMsgList(messageDTO,userId);

        return Result.success(systemMessageVO);
    }

    /**
     * 查询某个主题下的所有的信息
     * @param type
     * @param session
     * @return
     */
    @GetMapping("/systemDetailList")
    @LoginAnnotatio
    public Result noticeDetailList(@RequestParam("type") Integer type,@RequestParam("page") Integer page,
                                                @RequestParam("pageNum") Integer pageNum, HttpSession session){
        //首先得到当前的用户id。
        Integer userId = (Integer)session.getAttribute("userId");
        if(userId == null){
            userId = Integer.parseInt(ThreadLocalUserId.get());
        }
        //根据传入过来的类型，来查找对应类型的数据。
        /**
         * 1代表评论
         * 2代表赞
         * 3代表关注
         */
        MessageListVO messageListVO = messageService.noticeDetailList(type,page,pageNum,userId);

        return Result.success(messageListVO);
    }
}
